home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / sys / common.c < prev    next >
C/C++ Source or Header  |  1990-12-19  |  3KB  |  116 lines

  1.  
  2. /*
  3.  * @(#)common.c 1.1 86/09/27
  4.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  5.  */
  6.  
  7. /*
  8.  * Common code for various bootstrap routines.
  9.  */
  10.  
  11. /*RJHG************************************************************************
  12.  *RJHG*    20-Dec-85
  13.  *RJHG*        CHANGE isspinning to exit to monitor if fail instead of
  14.  *RJHG*               returning an error.  This done to make this look
  15.  *RJHG*               like the Sun-2 monitor.  This may not be the best
  16.  *RJHG*               place to put this effect but it is the recommended
  17.  *RJHG*               place so we'll leave it here till we can get it changed
  18.  *RJHG*
  19.  *RJHG************************************************************************/
  20.  
  21. #include "../sun3/cpu.addrs.h"
  22. #include "../dev/saio.h"
  23. #include "../h/globram.h"
  24. #ifndef major
  25. /* Kludge avoids defining types.h twice...once in globram (maybe), once here */
  26. #include "../h/types.h"
  27. #endif major
  28. #include "../dev/dklabel.h"
  29.  
  30. char msg_spinup[] = "\n\007Waiting for disk to spin up...\n\n\
  31. Please start it, if necessary, -OR- press any key to quit.\n\n";
  32. char msg_nolabel[] = "No label found - attempting boot anyway.\n";
  33. char msg_noctlr[] = "No controller at mbio %x\n";
  34.  
  35. bzero(p, n)
  36.     register char *p;
  37.     register int n;
  38. {
  39.     register char zeero = 0;
  40.  
  41.     while (n > 0)
  42.         *p++ = zeero, n--;    /* Avoid clr for 68000, still... */
  43. }
  44.  
  45. bcopy(src, dest, count)
  46.     register char *src, *dest;
  47.     register short count;
  48. {
  49.     count--;
  50.     do {
  51.         *dest++ = *src++;
  52.     } while (--count != -1);
  53. }
  54.  
  55. chklabel(label)
  56.     register struct dk_label *label;
  57. {
  58.     register int count, sum = 0;
  59.     register short *sp;
  60.  
  61.     if (label->dkl_magic != DKL_MAGIC) {
  62.         printf(msg_nolabel);
  63.         return (1);
  64.     }
  65.  
  66.     count = sizeof (struct dk_label) / sizeof (short);
  67.     sp = (short *)label;
  68.     while (count--) 
  69.         sum ^= *sp++;
  70.     if (sum != 0) {
  71.         printf("Corrupt label\n");
  72.         return (1);
  73.     }
  74.     return (0);
  75. }
  76.  
  77. /*
  78.  * Returns 0 if disk is apparently not spinning, after waiting awhile.
  79.  * Returns 1 if disk is already spinning on entry to this routine.
  80.  * Returns 2 if disk starts spinning sometime after entry to this routine.
  81.  * 
  82.  * If on initial entry, after a suitable delay, the disk is not spinning,
  83.  * we produce a message to remind the user to turn on the disk.
  84.  */
  85. isspinning(isready, addr, data) 
  86.     int (*isready)();
  87.     char *addr;
  88.     int data;
  89. {
  90.     long t;
  91.  
  92.     /*
  93.      * Wait for disk to spin up, if necessary.
  94.      */
  95.     if ((*isready)(addr, data)) return 1;
  96.     DELAY(1000000);            /* RTZ can take a long time */
  97.     if ((*isready)(addr, data)) return 2;
  98.     while (mayget() != -1)        /* clear typeahead */
  99.         ;
  100.     printf(msg_spinup);
  101.     t = (3*60*1000) + gp->g_nmiclock;    /* quitting time in 3 minutes. */
  102.     while (!(*isready)(addr, data)) {
  103.         if (mayget() != -1)
  104. /*RJHG*//*        return 0; Removed to allow a call to exit_to_mon() */
  105. /*RJHG*/            {
  106. /*RJHG*/        exit_to_mon(); /* Go to monitor on fail (like Sun-2) */
  107.                     }
  108.         if (gp->g_nmiclock > t) {
  109.             printf("Giving up...\n\n");
  110. /*RJHG*//*        return 0; Removed to allow a call to exit_to_mon() */
  111. /*RJHG*/        exit_to_mon(); /* Go to monitor on fail (like Sun-2) */
  112.         }
  113.     }
  114.     return 2;            /* Must be spinning... */
  115. }
  116.